package com.gavin.demo4fresco.adapters;

import android.content.Context;
import android.graphics.PointF;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.drawable.ProgressBarDrawable;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gavin.demo4fresco.R;
import com.gavin.demo4fresco.config.GlobalConst;
import com.gavin.demo4fresco.model.entities.PictureObj;

import java.util.List;

/**
 * Created by Gavin on 16/2/16.
 */
public class ScaleAdapter extends RecyclerView.Adapter<ScaleAdapter.ScaleViewHolder>{
    private Context mContext;
    private List<PictureObj> objs;

    public ScaleAdapter(Context context,List<PictureObj> objs) {
        this.mContext = context;
        this.objs = objs;
    }

    @Override
    public ScaleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ScaleViewHolder viewHolder = new ScaleViewHolder(LayoutInflater.from(mContext).inflate(R.layout.main_item_content_recycleview,parent,false));
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ScaleViewHolder holder, int position) {
        // 设置进度条,可以自定义进度条,具体详情见 README.md
        GenericDraweeHierarchy hierarchy = holder.draweeView.getHierarchy();
        // 这样，在 Drawee 的底部就会有一个深蓝色的矩形进度条
        hierarchy.setProgressBarImage(new ProgressBarDrawable());

        switch (position) {
            case GlobalConst.CENTER:
                // 居中，无缩放
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER);
                break;
            case GlobalConst.CENTER_CROP:
                // 保持宽高比缩小或放大，使得两边都大于或等于显示边界，且宽或高契合显示边界。居中显示
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP);
                break;
            case GlobalConst.FOCUS_CROP:
                // 同centerCrop, 但居中点不是中点，而是指定的某个点
                PointF focusPoint = new PointF(0.4f,0.4f);
                hierarchy.setActualImageFocusPoint(focusPoint);
                break;
            case GlobalConst.CENTER_INSIDE:
                // 缩放图片使两边都在显示边界内，居中显示。和 fitCenter 不同，不会对图片进行放大
                // 如果图尺寸大于显示边界，则保持长宽比缩小图片
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);
                break;
            case GlobalConst.FIT_CENTER:
                // 保持宽高比，缩小或者放大，使得图片完全显示在显示边界内，且宽或高契合显示边界。居中显示
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
                break;
            case GlobalConst.FIT_START:
                // 同上。但不居中，和显示边界左上对齐
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_START);
                break;
            case GlobalConst.FIT_END:
                // 同fitCenter， 但不居中，和显示边界右下对齐
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_END);
                break;
            case GlobalConst.FIT_XY:
                // 不保存宽高比，填充满显示边界
                hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY);
                break;
            case GlobalConst.NONE:
                // 如果你要使用tile mode进行显示，才需要将 scale type 设置为 none
                // ScalingUtils.ScaleType 没有 NONE 参数, 但可以在 xml 里可以设置
                // card_view:actualImageScaleType="none" 来达到效果
                break;
        }

        holder.draweeView.setImageURI(Uri.parse(objs.get(position).getUrl()));
        holder.mTextView.setText(objs.get(position).getDesc());
    }

    @Override
    public int getItemCount() {
        return objs.size();
    }

    class ScaleViewHolder extends RecyclerView.ViewHolder {
        SimpleDraweeView draweeView;
        TextView mTextView;

        public ScaleViewHolder(View itemView) {
            super(itemView);
            draweeView = (SimpleDraweeView) itemView.findViewById(R.id.main_item_content_draweeview);
            mTextView = (TextView) itemView.findViewById(R.id.main_item_content_textview);
        }
    }
}
